原创使用InvokeRepeating差值器平滑抬高摄像头Camera角度
简书链接:原创使用InvokeRepeating差值器平滑抬高摄像头Camera角度
文章字数:508,阅读全文大约需要2分钟
判断角度差使用Quaternion.Angle(targetRotation, Camera.main.transform.rotation)
如果直接用 Camera.main.transform.rotation.x判断你会发现, 递减到0之后又到了360,显然是不行的。它永远是0到360的循环
Camera.main.transform.eulerAngles = Vector3.Lerp(Camera.main.transform.eulerAngles,new Vector3(-40, Camera.main.transform.eulerAngles.y, Camera.main.transform.eulerAngles.z), Time.deltaTime);
1  | ,不过 ```Lerp```和```Slerp```是有点不一样的。一个是球性差值器,一个是线性差值器  | 
void CameraUp()
{
    Quaternion targetRotation = Quaternion.Euler(-30, Camera.main.transform.rotation.y, Camera.main.transform.rotation.z);// * Quaternion.identity;
    string str=(Quaternion.Angle(targetRotation, Camera.main.transform.rotation))+"差";
        print("angle x:" + Camera.main.transform.eulerAngles.x+",差多少:"+str);
    Camera.main.transform.rotation = Quaternion.Slerp(Camera.main.transform.rotation, targetRotation, Time.deltaTime * 2);//利用Slerp插值让物体进行旋转  2是旋转速度 越大旋转越快
        //Camera.main.transform.eulerAngles = Vector3.Lerp(Camera.main.transform.eulerAngles,new Vector3(-40, Camera.main.transform.eulerAngles.y, Camera.main.transform.eulerAngles.z), Time.deltaTime);
    if (Quaternion.Angle(targetRotation, Camera.main.transform.rotation) <1)
    {
        CancelInvoke("CameraUp");
        print("cancel");
        return;
    }
    else
    {
    }
    }
1  | 
  | 
   if (Quaternion.Angle(targetRotation, Quaternion.Euler(Camera.main.transform.localEulerAngles.x, Camera.main.transform.localEulerAngles.y, Camera.main.transform.localEulerAngles.z)) < 1)
1  | 和之前代码区别就是 这里 传递的是```Quaternion.Euler(```而不是直接的```rotation```  | 
    Quaternion targetRotation = Quaternion.Euler(-30, Camera.main.transform.localEulerAngles.y, Camera.main.transform.localEulerAngles.z);// * Quaternion.identity;
    string str = (Quaternion.Angle(targetRotation, Camera.main.transform.localRotation)) + "差";
    print("angle x:" + Camera.main.transform.localEulerAngles.x + ",差多少:" + str);
    Camera.main.transform.localEulerAngles = Vector3.Lerp(Camera.main.transform.localEulerAngles, new Vector3(-30, Camera.main.transform.localEulerAngles.y, Camera.main.transform.localEulerAngles.z), Time.deltaTime);
    if (Quaternion.Angle(targetRotation, Quaternion.Euler(Camera.main.transform.localEulerAngles.x, Camera.main.transform.localEulerAngles.y, Camera.main.transform.localEulerAngles.z)) < 1)
    {
        CancelInvoke("CameraUp");
        print("cancel");
        return;
    }
    else
    {
    }
1  | 
  | 
Quaternion targetRotation = Quaternion.Euler(-30, Camera.main.transform.localEulerAngles.y, Camera.main.transform.localEulerAngles.z);// * Quaternion.identity;
            string str = (Quaternion.Angle(targetRotation, Camera.main.transform.localRotation)) + "差";
            print("angle x:" + Camera.main.transform.localEulerAngles.x + ",差多少:" + str);
            Camera.main.transform.localRotation = Quaternion.Slerp(Camera.main.transform.localRotation, targetRotation, Time.deltaTime * 2);//利用Slerp插值让物体进行旋转  2是旋转速度 越大旋转越快
            if (Quaternion.Angle(targetRotation, Camera.main.transform.localRotation) < 1)
            {
                CancelInvoke("CameraUp");
                print("cancel");
                return;
            }
            else
            {
            }
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 情迁博客!
 评论

